/********************************************************************************
 * Copyright (c) 2021,2022 Contributors to the CatenaX (ng) GitHub Organisation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Apache License, Version 2.0 which is available at
 * https://www.apache.org/licenses/LICENSE-2.0.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 *
 * SPDX-License-Identifier: Apache-2.0
 ********************************************************************************/

import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';
import { NotificationMessage, NotificationStatus } from './notification-message.model';

@Component({
  selector: 'app-notification-message',
  templateUrl: './notification-message.component.html',
  styleUrls: ['./notification-message.component.scss'],
})
export class NotificationMessageComponent implements OnChanges {
  @Input() notifierMessage: NotificationMessage;
  @Output() removeNotification: EventEmitter<NotificationMessage> = new EventEmitter<NotificationMessage>();

  public statusBarCss: string;

  public ngOnChanges(): void {
    this.changeStatusBarCss();
  }

  public remove(): void {
    this.removeNotification.emit(this.notifierMessage);
  }

  private changeStatusBarCss(): void {
    const cssMapping = new Map([
      [NotificationStatus.Success, 'status-bar-success'],
      [NotificationStatus.Warning, 'status-bar-warning'],
      [NotificationStatus.Error, 'status-bar-error'],
      [NotificationStatus.Informative, 'status-bar-informative'],
    ]);

    this.statusBarCss = cssMapping.get(this.notifierMessage.status);
  }
}
